package mark.wxming.twotigerlock.lock;

import mark.wxming.twotigerlock.lock.memory.MemoryLockHandler;
import mark.wxming.twotigerlock.lock.redis.RedisLockHandler;
import mark.wxming.twotigerlock.utils.ConfigUtil;

/**
 * 锁工厂类
 * @author twotiger-wxm.
 * @date 2019/4/23.
 */
public class LockFactory {
    /*
    Redis支持多个数据库，并且每个数据库的数据是隔离的不能共享，并且基于单机才有，如果是集群就没有数据库的概念？。
    每个数据库对外都是一个从0开始的递增数字命名，Redis默认支持16个数据库(最大索引15）。客户端与Redis建立连接后会自动选择0号数据库，不过可以随时使用SELECT命令更换数据库，如SELECT 1。

    以下基于不同编号的数据库，所加的锁是互相隔离的。
     */
    //支付锁
    public static ILockHandler payLockHandler = null;
    //app锁
    public static ILockHandler appLockHandler = null;
    //备用锁
    public static ILockHandler otherLockHandler = null;
    static {
        if ("true".equalsIgnoreCase(ConfigUtil.getInstance().getString("redis.enable"))) {
            payLockHandler = new RedisLockHandler(1);
            appLockHandler = new RedisLockHandler(2);
            otherLockHandler = new RedisLockHandler(3);
        } else {
            payLockHandler = new MemoryLockHandler();
            appLockHandler = new MemoryLockHandler();
            otherLockHandler = new MemoryLockHandler();
        }
    }
}
